package gestores;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.ArrayList;

import javax.swing.JOptionPane;
import utilidades.Md5;
import utilidades.EnvioEmail;
import ventanas.VentanaRegistro;
import clasesBasicas.Global;
import clasesBasicas.Usuario;
/*
 * Clase para la gestion de los usuario
 */
public class SistemaUsuarios {

	private static Connection conexion;
	public static Usuario usuarioActual;
	/*
	 * Constructro basico obtiene la conexión que tiene SistemaEmpresas
	 */
	public SistemaUsuarios() {
		// se hará una descarga de los datos de los usuarios del servidor
		this.conexion = SistemaEmpresas.conexion;
	}

	/*
	 * Cre conexion para las consultas//No se usa
	 */
	/*
	private void obtenerConexion() {
		// System.out.println("AQUIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII");
		try {
			Class.forName("oracle.jdbc.OracleDriver");
			// String BaseDeDatos = "jdbc:oracle:thin:@10.166.54.214:1521:XE";

			String BaseDeDatos = "jdbc:oracle:thin:@bdprog4.no-ip.org:1521:XE";
			// String BaseDeDatos = "jdbc:oracle:thin:@192.168.1.33:1521:XE";
			System.out.println("paso1");
			conexion = DriverManager.getConnection(BaseDeDatos, "admin",
					"admin");
			System.out.println("paso2");
			if (conexion != null) {
				System.out
				.println("----------------Conexion exitosa!-------------------");
			} else {
				System.out.println("Conexion fallida!");
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}*/
	
	/*
	 * Devuelve conexión
	 */
	public static Connection getConexion() {
		return conexion;
	}
	/*
	 * Añade favorito a la BD
	 */
	public void añadirFavorito(int dni, int codEmpresa) {

		String sql = "INSERT INTO VALORES_FAVORITOS VALUES (" + dni + ","
				+ codEmpresa + ")";

		int resultado = 0;
		System.out.println(sql + "\n");
		Statement sentencia = null;
		try {
			sentencia = getConexion().createStatement(
					ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
			resultado = sentencia.executeUpdate(sql);

		} catch (SQLException e) {
			e.printStackTrace();
		}

		try {
			sentencia.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if (resultado != 0) {
			Global.sU.usuarioActual.setFavorito(codEmpresa, true);
		}
	}
	/*
	 * Elimina usuario de la BD
	 */
	public void eliminarFavorito(int dni, int codEmpresa) {
		String sql = "DELETE FROM VALORES_FAVORITOS WHERE DNI = " + dni
				+ " AND COD_EMPRESA = " + codEmpresa;

		int resultado = 0;
		System.out.println(sql + "\n");
		Statement sentencia = null;
		try {
			sentencia = getConexion().createStatement(
					ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
			resultado = sentencia.executeUpdate(sql);

		} catch (SQLException e) {
			e.printStackTrace();
		}

		try {
			sentencia.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			getConexion().commit();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if (resultado != 0) {
			Global.sU.usuarioActual.setFavorito(codEmpresa, false);
		}
	}

	/*
	 * Metodo para el login, consultando la tabla usuario de la BD
	 */
	public int existeUsuario(String id_usuario, String contraseña)
			throws SQLException {
		// 1 significa que existe ese usuario y la contraseña es correcta
		// -1 significa que existe ese usuario, pero que la contraseña es
		// incorrecta
		// 0 el usuario no existe

		String consulta = "SELECT * FROM USUARIO WHERE ID_USUARIO=?";

		ResultSet respuesta = realizarConsultaUsuario(consulta, id_usuario);
		// Podríamos utilizar un metodo para encriptar la contraseña, de manera
		// que sea más seguro
		if (respuesta.next()) {
			if ((respuesta.getString("CONTRASENA")).equals(Md5.md5("lulu" + contraseña))) {
				Usuario u = new Usuario(respuesta.getInt("DNI"),
						respuesta.getString("NOMBRE"),
						respuesta.getString("APELLIDOS"),
						respuesta.getString("ID_USUARIO"),
						respuesta.getString("CONTRASENA"),
						respuesta.getString("EMAIL"),
						respuesta.getInt("DINERO_ACTUAL"),
						respuesta.getInt("NIVEL_ACTUAL"),
						respuesta.getString("PREGUNTA_SECRETA"),
						respuesta.getString("RESPUESTA_SECRETA"), respuesta
						.getString("ES_ADMINISTRADOR").charAt(0));
				usuarioActual = u;
				respuesta.close();
				return 1;

			} else {
				respuesta.close();
				return -1;
			}
		} else {
			respuesta.close();
			return 0;
		}
	}

	/*
	 * Realiza la consulta que se le mande
	 */
	private ResultSet realizarConsultaUsuario(String consulta, String id) {

		String sql = consulta;

		ResultSet resultado = null;
		PreparedStatement sentencia = null;
		try {
			sentencia = conexion.prepareStatement(sql);
			sentencia.setString(1, id);
			// sentencia.setString(2, contraseña);
			// sentencia =
			// getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY,
			// ResultSet.CONCUR_READ_ONLY);
			resultado = sentencia.executeQuery();

		} catch (SQLException e) {
			e.printStackTrace();
		}

		// cierres

		return resultado;
	}

	/*
	 * Metodo que devuelve la lista completa de Usuarios mediante consulta a la BD
	 */
	public ArrayList<Usuario> obtenerUsuariosRegistrados() {
		ArrayList<Usuario> aUsuarios = new ArrayList<Usuario>();

		String sql = "SELECT * FROM USUARIO";
		ResultSet resultado = null;
		Statement sentencia = null;

		try {
			sentencia = getConexion().createStatement(
					ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
			resultado = sentencia.executeQuery(sql);

		} catch (SQLException e) {
			e.printStackTrace();
		}

		try {

			while (resultado.next()) {
				Usuario temp = new Usuario(resultado.getInt("DNI"),
						resultado.getString("NOMBRE"),
						resultado.getString("APELLIDOS"),
						resultado.getString("ID_USUARIO"),
						resultado.getString("CONTRASENA"),
						resultado.getString("EMAIL"),
						resultado.getInt("DINERO_ACTUAL"),
						resultado.getInt("NIVEL_ACTUAL"),
						resultado.getString("PREGUNTA_SECRETA"),
						resultado.getString("RESPUESTA_SECRETA"), resultado
						.getString("ES_ADMINISTRADOR").charAt(0));

				aUsuarios.add(temp);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			sentencia.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			resultado.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return aUsuarios;
	}

	/*
	 * Metodo para la consulta de si existe un usuario con un id concreto en la BD
	 */
	public boolean existeUsuarioReg(String id_usuario) {
		String sql = "SELECT * FROM USUARIO WHERE ID_USUARIO='" + id_usuario
				+ "'";
		System.out.println(sql + "\n");
		ResultSet resultado = null;
		Statement sentencia = null;
		try {
			sentencia = getConexion().createStatement(
					ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
			resultado = sentencia.executeQuery(sql);

		} catch (SQLException e) {
			e.printStackTrace();
		}

		boolean res = false;
		try {
			res = resultado.next();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace(); // avisar de que ha habido un error
		}

		// cierres
		try {
			resultado.close();
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {
			sentencia.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return res; // true- existe usuario y false- no existe

	}

	/*
	 * Metodo para añadir un usuario nuevo a la BD
	 */
	public static void añadirUsuario(Usuario u, String esadmin, int gradopermiso)
			throws SQLException {
		// a la hora de añadir un usuario, enviar un email de confirmación
		String sql = "INSERT INTO USUARIO VALUES (" + u.getDni() + ",'"
				+ u.getNombre() + "','" + u.getApellidos() + "','"
				+ u.getId_usuario() + "'," + "'" + Md5.md5("lulu" + u.getContraseña()) + "','"
				+ u.getEmail() + "'," + u.getDineroActual() + ","
				+ u.getNivelActual() + ",'" + u.getPregSecreta() + "','"
				+ u.getRespSecreta() + "','" + esadmin + "'," + gradopermiso
				+ ")";

		int resultado = 0;
		System.out.println(sql + "\n");
		Statement sentencia = null;
		try {
			sentencia = getConexion().createStatement(
					ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
			resultado = sentencia.executeUpdate(sql);

		} catch (SQLException e) {
			e.printStackTrace();
		}

		try {
			sentencia.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		if (resultado == 1) {
			// añado al ranking de puntuación.

			Timestamp ts = new Timestamp(System.currentTimeMillis());
			PreparedStatement stmt;
			stmt = conexion
					.prepareStatement("INSERT INTO RANKING VALUES (?,?,?)");
			stmt.setString(1, u.getId_usuario());
			stmt.setTimestamp(2, ts);
			stmt.setInt(3, 0);
			resultado = stmt.executeUpdate();
			stmt.close();

			if (resultado == 1) {
				System.out.println("Bien");
				EnvioEmail eE = new EnvioEmail();
				eE.send("programatrading@gmail.com",
						"guachupo69",
						"smtp.gmail.com",
						"465",
						u.getEmail(),
						"¡Bienvenido a IbexTrading!",
						"¡Hola "
								+ u.getId_usuario()
								+ "! \n ¡Bienvenido a el programa trading lider del mercado! \n \n Gracias por probar nuestro programa y esperamos que aprenda mucho. \n Si tiene alguna duda, no dude en contactar con programatrading@gmail.com.\n \n Un saludo, \n El equipo de IbexTrading.");
				usuarioActual = u;
				JOptionPane
				.showMessageDialog(
						null,
						"El usuario "
								+ u.getId_usuario()
								+ " se ha creado correctamente. Se ha enviado un email de confirmación",
								"Cuenta Creada",
								JOptionPane.INFORMATION_MESSAGE);
			}
		} else {
			// No se ha podido crear el usuario
			System.out.println("No se ha creado el usuario.");
		}

	}

	/*
	 *Metodo para actualizar el nivel del usuario en la BD 
	 */
	public void actualizarPuntos(double puntos, Usuario u) {
		boolean modificado = false;
		int nivel = 0;
		switch (u.getNivelActual()) {

		case 1:
			if (puntos >= 50000 && puntos < 120000) {
				u.setNivelActual(2);
				nivel = 2;
				modificado = true;
			} else if (puntos >= 120000 && puntos < 220000) {
				u.setNivelActual(3);
				nivel = 3;
				modificado = true;
			} else if (puntos >= 220000 && puntos < 350000) {
				u.setNivelActual(4);
				nivel = 4;
				modificado = true;
			}

		case 2:
			if (puntos >= 120000 && puntos < 220000) {
				u.setNivelActual(3);
				nivel = 3;
				modificado = true;
			} else if (puntos >= 220000 && puntos < 350000) {
				u.setNivelActual(4);
				nivel = 4;
				modificado = true;
			}

		case 3:
			if (puntos >= 220000 && puntos < 350000) {
				u.setNivelActual(4);
				nivel = 4;
				modificado = true;
			}
		}
		//Si se ha modificado el valor se actualiza la base de datos.
		if(modificado){
			// la consulta
			String sql = "UPDATE USUARIO SET NIVEL_ACTUAL = " + nivel 
					+ "WHERE DNI = " + u.getDni() + "";

			System.out.println(sql);
			Statement sentencia = null;
			int resultado = 0;
			try {
				sentencia = getConexion()
						.createStatement(ResultSet.TYPE_FORWARD_ONLY,
								ResultSet.CONCUR_READ_ONLY);
				resultado = sentencia.executeUpdate(sql);


			} catch (SQLException e) {
				e.printStackTrace();

			}

			try {
				sentencia.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (resultado == 1) {
				// se realizo correctamente
				JOptionPane
				.showMessageDialog(
						null,
						"Enhorabuena ha aumentado de nivel de juego. Actualmente se encuantra en el nivel " + nivel,
						"Aumento de nivel",
						JOptionPane.INFORMATION_MESSAGE);
			}
		}

	}

	/*
	 * Metodo para actualizar la contraseña de un usuario en la BD
	 */
	public void cambiarContrasena(String contr) {
		if (usuarioActual != null) {

			// la consulta
			String sql = "UPDATE USUARIO SET CONTRASENA = '" + Md5.md5("lulu" + contr)  + "' "
					+ "WHERE DNI = " + usuarioActual.getDni() + "";

			System.out.println(sql);
			Statement sentencia = null;
			int resultado = 0;
			try {
				sentencia = getConexion()
						.createStatement(ResultSet.TYPE_FORWARD_ONLY,
								ResultSet.CONCUR_READ_ONLY);
				resultado = sentencia.executeUpdate(sql);
				usuarioActual.setContraseña(contr);

			} catch (SQLException e) {
				e.printStackTrace();
				// JOptionpanel de denegación
				JOptionPane
				.showMessageDialog(
						null,
						"No se ha podido cambiar la contraseña. Intentelo más tarde.",
						"Error con el servidor",
						JOptionPane.ERROR_MESSAGE);
			}

			try {
				sentencia.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if (resultado == 1) {
				// se realizo correctamente
				JOptionPane
				.showMessageDialog(
						null,
						"Se ha cambiado la contraseña correctamente. Se envio un email de confirmación del cambio.",
						"Cambio en contraseña efectuado",
						JOptionPane.INFORMATION_MESSAGE);
				EnvioEmail eE = new EnvioEmail();
				eE.send("programatrading@gmail.com",
						"guachupo69",
						"smtp.gmail.com",
						"465",
						usuarioActual.getEmail(),
						"Cambio en contraseña",
						"¡Hola "
								+ usuarioActual.getId_usuario()
								+ "! \n Hemos cambiado correctamente la contraseña de su cuenta a la nueva que nos había proporcionado. \n Si usted no ha realizado ningún tipo de cambio, contacto con el servicio de IbexTrading mediante el correo electrónico: programatrading@gmail.com. Gracias por utilizarnos. \n Un saludo, \n El equipo de IbexTrading.");
				System.out.println(usuarioActual.getEmail());
			} else {
				JOptionPane
				.showMessageDialog(
						null,
						"No se ha podido realizar el cambio. Intentelo más tarde",
						"Error al cambiar contraseña",
						JOptionPane.ERROR_MESSAGE);

			}
		}
	}

	/*
	 * Metodo que elimina usuario de la BD
	 */
	public void eliminarUsuario() {
		// el usuario a eliminar es el actual
		System.out.println(usuarioActual);
		if (usuarioActual != null) {
			Usuario uEliminar = usuarioActual;
			// la consulta
			String sql = "DELETE FROM USUARIO WHERE DNI=" + uEliminar.getDni()
					+ "";
			System.out.println(sql);

			Statement sentencia = null;
			int resultado = 0;
			try {
				sentencia = getConexion()
						.createStatement(ResultSet.TYPE_FORWARD_ONLY,
								ResultSet.CONCUR_READ_ONLY);
				resultado = sentencia.executeUpdate(sql);
				// JOption panel de confirmación
				if (resultado == 1) {
					JOptionPane
					.showMessageDialog(
							null,
							"Cuenta borrada correctamente",
							"Operación realizada. Se le ha enviado un email de confirmación a su cuenta de correo electrónico.",
							2);
					EnvioEmail eE = new EnvioEmail();
					eE.send("programatrading@gmail.com",
							"guachupo69",
							"smtp.gmail.com",
							"465",
							uEliminar.getEmail(),
							"Cuenta eliminada",
							"¡Hola "
									+ usuarioActual.getId_usuario()
									+ "! \n Gracias por haber contado con nuestro programa todo este tiempo y esperamos que lo haya disfrutado. \n Si usted no ha borrado, contacto con el servicio de IbexTrading mediante el correo electrónico: programatrading@gmail.com y intentaremos restablecerle la cuenta. Gracias por utilizarnos. \n Un saludo, \n El equipo de IbexTrading.");
					// usuario actual a null
					usuarioActual = null;
				}
			} catch (SQLException e) {
				JOptionPane
				.showMessageDialog(null,
						"Ha ocurrido un error al borrar su cuenta.",
						"Error", 0);
			}

			try {
				sentencia.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

	/*
	 * Metodo muestra los datos de una tabla ¿?¿?¿?¿?¿?¿?¿?
	 */
	public void mostrarTabla(String tabla) {
		String sql = "SELECT * FROM " + tabla;
		ResultSet resultado = null;
		Statement sentencia = null;
		try {
			sentencia = getConexion().createStatement(
					ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
			resultado = sentencia.executeQuery(sql);

		} catch (SQLException e) {
			e.printStackTrace();
		}

		try {
			while (resultado.next()) {

				System.out.println(resultado.getInt("DNI") + "\t"
						+ resultado.getString("ID_USUARIO") + "\t"
						+ resultado.getString("CONTRASENA"));
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			sentencia.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		try {
			resultado.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/*
	 * Devuelve array con las empresas favoritas ¿?¿?¿?¿?
	 */
	public int[] obtenerEmpresasFavoritas() throws SQLException {

		int[] aEmpresas = new int[35];
		int contador = 0;
		while (contador < usuarioActual.getFavoritoLista().length) {
			if (usuarioActual.getFavorito(contador + 1)) {
				aEmpresas[contador] = contador + 1;
			}
			contador++;
		}

		// String sql = "SELECT COD_EMPRESA FROM VALORES_FAVORITOS WHERE DNI = "
		// + usuarioActual.getDni();
		//
		// ResultSet resultado = null;
		// Statement sentencia = null;
		// try {
		// sentencia = getConexion().createStatement(
		// ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
		// resultado = sentencia.executeQuery(sql);
		//
		//
		// } catch (SQLException e) {
		// e.printStackTrace();
		// }
		// System.out.println("HOLA");
		// try {
		//
		// while (resultado.next()) {
		// System.out.println("HIII "+resultado.getInt("COD_EMPRESA"));
		// aEmpresas[contador] = resultado.getInt("COD_EMPRESA");
		//
		// contador++;
		// }
		// } catch (SQLException e) {
		// // TODO Auto-generated catch block
		// e.printStackTrace();
		// }
		// try {
		// sentencia.close();
		// } catch (SQLException e) {
		// // TODO Auto-generated catch block
		// e.printStackTrace();
		// }
		// try {
		// resultado.close();
		// } catch (SQLException e) {
		// // TODO Auto-generated catch block
		// e.printStackTrace();
		// }
		return aEmpresas;

	}

	/*
	 * Consulta el ranking en la BD y devuelve una tabla en forma de array-bidimensional de String con los datos
	 */
	public String[][] obtenerUsuariosRanking() throws SQLException {

		String[][] aRanking = new String[12][3];
		int contador = 1;
		String sql = "SELECT * FROM RANKING ORDER BY PUNTUACION DESC";
		ResultSet resultado = null;
		Statement sentencia = null;
		boolean encontrado = false;
		try {
			sentencia = getConexion().createStatement(
					ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
			resultado = sentencia.executeQuery(sql);

		} catch (SQLException e) {
			e.printStackTrace();
		}

		try {

			while (resultado.next() && contador < 10) {
				String id_usu = resultado.getString("ID_USUARIO");

				if (id_usu.equals(usuarioActual.getId_usuario())) {
					encontrado = true;
				}
				aRanking[contador][0] = contador + "";
				System.out.println(aRanking[contador][0]);
				aRanking[contador][1] = id_usu;
				System.out.println(aRanking[contador][1]);
				aRanking[contador][2] = resultado.getInt("PUNTUACION") + "";
				System.out.println(aRanking[contador][2]);
				contador++;

			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			sentencia.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			resultado.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		if (!encontrado) {

			resultado = null;
			sentencia = null;
			sql = "SELECT * FROM RANKING ORDER BY PUNTUACION DESC";
			try {
				sentencia = getConexion()
						.createStatement(ResultSet.TYPE_FORWARD_ONLY,
								ResultSet.CONCUR_READ_ONLY);
				resultado = sentencia.executeQuery(sql);

			} catch (SQLException e) {
				e.printStackTrace();
			}

			int pos = 1;
			boolean var = true;
			String id_usuario = "";
			int puntuacion = 0;
			while (resultado.next() && var) {
				id_usuario = resultado.getString("ID_USUARIO");
				puntuacion = resultado.getInt("PUNTUACION");
				if (!(resultado.getString("ID_USUARIO").equals(usuarioActual
						.getId_usuario()))) {
					// sigue
					pos++;
				} else {
					// lo ha encontrado
					var = false;
				}

			}
			if (!var) {
				aRanking[contador][0] = (pos + 1) + "";
				System.out.println(aRanking[contador][0]);
				aRanking[contador][1] = id_usuario;
				System.out.println(aRanking[contador][1]);
				aRanking[contador][2] = puntuacion + "";
				System.out.println(aRanking[contador][2]);
			}
		}

		return aRanking;
	}


	/*
	 * Actualiza los datos del usuario actual , mediante consulta a la BD
	 */
	public void actualizarUsuario() {
		String sql = "SELECT * FROM USUARIO WHERE ID_USUARIO='"
				+ usuarioActual.getDni() + "'";
		ResultSet respuesta = null;
		Statement sentencia = null;
		try {
			sentencia = getConexion().createStatement(
					ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
			respuesta = sentencia.executeQuery(sql);
			if (respuesta.next()) {
				Usuario u = new Usuario(respuesta.getInt("DNI"),
						respuesta.getString("NOMBRE"),
						respuesta.getString("APELLIDOS"),
						respuesta.getString("ID_USUARIO"),
						respuesta.getString("CONTRASENA"),
						respuesta.getString("EMAIL"),
						respuesta.getInt("DINERO_ACTUAL"),
						respuesta.getInt("NIVEL_ACTUAL"),
						respuesta.getString("PREGUNTA_SECRETA"),
						respuesta.getString("RESPUESTA_SECRETA"), respuesta
						.getString("ES_ADMINISTRADOR").charAt(0));
				usuarioActual = u;
				respuesta.close();

			}
		} catch (Exception e) {
			System.out.println("Error actualizar Usuario");
		}
	}


	/*
	 * Actualiza los valores que tiene un usuario mediante consulta a la BD
	 */
	public boolean actualizarAcciones() {
		boolean existe = false;
		String sql2 = "SELECT * FROM VALORES_PROPIEDAD WHERE DNI="
				+ Global.sU.usuarioActual.getDni();
		ResultSet resultado2 = null;
		Statement sentencia2 = null;
		int cantidad = 0;
		try {
			sentencia2 = getConexion().createStatement(
					ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
			resultado2 = sentencia2.executeQuery(sql2);
			while (resultado2.next()) {
				cantidad = resultado2.getInt(3);
				int cod_empresa = resultado2.getInt(2);
				gestores.SistemaUsuarios.usuarioActual.setAcciones(
						cod_empresa, cantidad);
				existe = true;
			}
			sentencia2.close();
			resultado2.close();

		} catch (SQLException e) {
			e.printStackTrace();

		}
		return existe;
	}

	/*
	 * Actualiza los valores marcados como favoritos mediante consulta a la BD
	 */
	public void actualizarFavorito() {
		String sql2 = "SELECT * FROM VALORES_FAVORITOS WHERE DNI="
				+ Global.sU.usuarioActual.getDni();
		ResultSet resultado2 = null;
		Statement sentencia2 = null;
		int dni = 0;
		try {
			sentencia2 = getConexion().createStatement(
					ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
			resultado2 = sentencia2.executeQuery(sql2);
			while (resultado2.next()) {
				dni = resultado2.getInt(1);
				int cod_empresa = resultado2.getInt(2);
				gestores.SistemaUsuarios.usuarioActual.setFavorito(cod_empresa,
						true);

			}
			sentencia2.close();
			resultado2.close();

		} catch (SQLException e) {
			e.printStackTrace();

		}
	}
	
	public int eliminarUsuario(int dni, String usuario)
	{
		String sql = "DELETE FROM USUARIO WHERE DNI=" + dni
				+ "";
		System.out.println(sql);

		Statement sentencia = null;
		int resultado = 0;
		try {
			sentencia = getConexion()
					.createStatement(ResultSet.TYPE_FORWARD_ONLY,
							ResultSet.CONCUR_READ_ONLY);
			resultado = sentencia.executeUpdate(sql);
		} catch (SQLException e) {
			JOptionPane.showMessageDialog(null,"Ha ocurrido un error al borrar la cuenta de "+usuario+".","Error", 0);
		}
		
		try {
			sentencia.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return resultado;
		
		
	}

	/*
	public static void main(String[] args) {
		SistemaUsuarios sU = new SistemaUsuarios(); // ¿Como arreglamos lo de
		// introducir usuario con
		// los dos ultimos campor de
		// si es administrador y su
		// grado.?
		// sU.añadirUsuario(new Usuario(12345600, "Evo", "Morales", "evonis",
		// "guachu", "kcifuentes4a@gmail.com", 1000, 0, "¿Eres sudaca?",
		// "Puede ser",'S',2));
		Usuario u = new Usuario(12345600, "Evo", "Morales", "evonis", "guachu",
				"kcifuentes4a@gmail.com", 1000, 0, "¿Eres sudaca?", "Puede ser");

		// Usuario u = new Usuario(12345600, "Evo", "Morales", "evonis",
		// "guachu", "kcifuentes4a@gmail.com", 1000, 0, "¿Eres sudaca?",
		// "Puede ser");
		// String
		// sql="INSERT INTO USUARIO VALUES ("+u.getDni()+",'"+u.getNombre()+"','"+u.getApellidos()+"','"+u.getId_usuario()+"',"
		// +
		// "'"+u.getContraseña()+"','"+u.getEmail()+"',"+u.getDineroActual()+","+u.getNivelActual()+",'"+u.getPregSecreta()+"','"+u.getRespSecreta()+"','S',2)";
		// int resultado=0;
		// System.out.println(sql+"\n");
		Statement sentencia = null;
		// try {
		// sentencia =
		// sU.getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY,
		// ResultSet.CONCUR_READ_ONLY);
		// resultado = sentencia.executeUpdate(sql);
		//
		// } catch (SQLException e) {
		// e.printStackTrace();
		// }
		// System.out.println("conseguido");
		// System.out.println(sU.existeNick("evonis"));

		try {
			System.out.println(sU.existeUsuario("evonis", "guachu"));
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		sU.mostrarTabla("USUARIO");
	}
	 */

	// public void registrarUsuario(String nombre, String contrasena, ){
	// //la consulta
	// String sql= "UPDATE USUARIO SET CONTRASENA = '"+contr+"' "
	// + "WHERE DNI = "+usuarioActual.getDni()+"";
	//
	// System.out.println(sql);
	// Statement sentencia= null;
	// int resultado = 0;
	// try {
	// sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY,
	// ResultSet.CONCUR_READ_ONLY);
	// resultado = sentencia.executeUpdate(sql);
	// usuarioActual.setContraseña(contr);
	//
	// } catch (SQLException e) {
	// e.printStackTrace();
	// //JOptionpanel de denegación
	// JOptionPane.showMessageDialog(null,
	// "No se ha podido cambiar la contraseña. Intentelo más tarde.",
	// "Error con el servidor", JOptionPane.ERROR_MESSAGE);
	// }
	//
	// try {
	// sentencia.close();
	// } catch (SQLException e) {
	// // TODO Auto-generated catch block
	// e.printStackTrace();
	// }
	// if(resultado==1)
	// {
	// //se realizo correctamente
	// JOptionPane.showMessageDialog(null,
	// "Se ha cambiado la contraseña correctamente. Se envio un email de confirmación del cambio.","Cambio en contraseña efectuado",
	// JOptionPane.INFORMATION_MESSAGE);
	// EnvioEmail eE= new EnvioEmail();
	// eE.send("programatrading@gmail.com", "guachupo69", "smtp.gmail.com",
	// "465", usuarioActual.getEmail(), "Cambio en contraseña",
	// "¡Hola "+usuarioActual.getId_usuario()+"! \n Hemos cambiado correctamente la contraseña de su cuenta a la nueva que nos había proporcionado. \n Si usted no ha realizado ningún tipo de cambio, contacto con el servicio de IbexTrading mediante el correo electrónico: programatrading@gmail.com. Gracias por utilizarnos. \n Un saludo, \n El equipo de IbexTrading.");
	// System.out.println(usuarioActual.getEmail());
	// }
	// else
	// {
	// JOptionPane.showMessageDialog(null,
	// "No se ha podido realizar el cambio. Intentelo más tarde","Error al cambiar contraseña",
	// JOptionPane.ERROR_MESSAGE);
	//
	// }
	// }

	// private void obtenerUsuarios() {
	//
	// String sql="SELECT * FROM USUARIO";
	//
	// ResultSet resultado = null;
	// try {
	// Statement sentencia;
	// sentencia = getConexion().createStatement(ResultSet.TYPE_FORWARD_ONLY,
	// ResultSet.CONCUR_READ_ONLY);
	// resultado = sentencia.executeQuery(sql);
	//
	// } catch (SQLException e) {
	// e.printStackTrace();
	// }
	//
	// try {
	// while(resultado.next())
	// {
	// System.out.println(resultado.getInt(1)+"-----"+resultado.getString(2)+"-----"+resultado.getString(3));
	// }
	// } catch (SQLException e) {
	// // TODO Auto-generated catch block
	// e.printStackTrace();
	// }
	//
	// }

}
